home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
biblio
/
bibtex
/
contrib
/
economic
/
aer.bst
< prev
next >
Wrap
Text File
|
1993-05-28
|
27KB
|
1,222 lines
% BibTeX bibliography style `aer' (American Economic Review)
% this file is based on the `harvard' family of files
% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
% Copyright (C) 1991, all rights reserved.
% Copying of this file is authorized only if either
% (1) you make absolutely no changes to your copy, including name, or
% (2) if you do make changes, you name it something other than
% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, abbrv.bst, agsm.bst,
% dcu.bst, cje.bst, aer.bst, or kluwer.bst.
% This restriction helps ensure that all standard styles are identical.
% ACKNOWLEDGEMENT:
% This document is a modified version of alpha.bst to which it owes much of
% its functionality.
% AUTHOR
% Peter Williams, Key Centre for Design Quality, Sydney University
% e-mail: peterw@archsci.arch.su.oz.au
ENTRY
{ address author booktitle chapter edition editor howpublished institution
journal key month note number organization pages publisher school
series title type volume year}
{ field.used }
{ label.touse extra.label sort.label list.year }
FUNCTION {not}
{ { #0 }
{ #1 }
if$
}
FUNCTION {and}
{ {}
{ pop$ #0 }
if$
}
FUNCTION {or}
{ { pop$ #1 }
{}
if$
}
INTEGERS {quoted italic bold plain attribute
space comma tiedcomma semicolon colon period block empty separator
prev.separator next.separator next.attribute}
STRINGS { s temp f name.list first.name.format later.name.formats name.style}
FUNCTION {init.state.consts}
{
#100 'quoted :=
#200 'italic :=
#300 'bold :=
#400 'plain :=
#7 'space :=
#6 'comma :=
% #5 'tiedcomma :=
% #4 'semicolon :=
#3 'colon :=
#2 'period :=
#1 'block :=
#0 'empty :=
}
FUNCTION {output2}
{
% Wrap the attribute.
attribute bold = {"{\bf " swap$ * "}" *} {} if$
attribute italic = {"{\it " swap$ * "}" *} {} if$
attribute quoted = {"``" swap$ * "''" *} {} if$
% Append additional separators
separator comma = {"," * space 'separator :=} {} if$
% separator tiedcomma = {",~" * empty 'separator :=} {} if$
separator space = {" " *} {} if$
write$
separator block = {newline$ "\newblock " write$} {} if$
% Update variables, and put the new string back on the stack
next.attribute 'attribute :=
next.separator 'separator :=
temp
}
% <string> <separator> <string> <attribute> <final separator> output <string>
FUNCTION {output.nonnull}
{ 'next.separator :=
'next.attribute :=
'temp :=
'prev.separator :=
% If the new separator is stronger than the previous one, use it.
prev.separator separator < {prev.separator 'separator :=} {} if$
% Append most separators to the string.
separator block = {add.period$} {} if$
separator period = {add.period$ space 'separator :=} {} if$
% separator semicolon = {";" * space 'separator :=} {} if$
separator colon = {":" * space 'separator :=} {} if$
separator comma = attribute quoted = and
{"," * space 'separator :=} {} if$
output2
}
FUNCTION {output}
{ 'next.separator :=
'next.attribute :=
duplicate$ empty$
{pop$ pop$}
{next.attribute next.separator output.nonnull}
if$
}
FUNCTION {output.check}
{ 's :=
'next.separator :=
'next.attribute :=
duplicate$ empty$
{pop$ pop$ "empty " s * " in " * cite$ * warning$ }
{next.attribute next.separator output.nonnull}
if$
}
FUNCTION {item.check}
{ 'temp :=
empty$
{ "empty " temp * " in " * cite$ * warning$ }
{}
if$
}
FUNCTION {plain.space} { plain space }
FUNCTION {plain.space.output} { plain.space output }
FUNCTION {plain.comma} { plain comma }
FUNCTION {fin.entry}
{
block note plain.space.output
period "" plain empty output.nonnull pop$
newline$
}
FUNCTION {field.or.null}
{ duplicate$ empty$
{ pop$ "" }
{}
if$
}
FUNCTION {emphasize}
{ duplicate$ empty$
{ pop$ "" }
{ "{\em " swap$ * "}" * }
if$
}
FUNCTION {quote}
{ duplicate$ empty$
{ pop$ "" }
{ add.period$ "`" swap$ * "'" * }
if$
}
% <prev name list> <new name list> compare.names <modified name list>
INTEGERS {len1 len2 i}
FUNCTION {compare.names}
{ 's :=
'temp :=
temp num.names$ 'len1 :=
s num.names$ 'len2 :=
% len1 := min(len1,len2)
len1 len2 > {len2 'len1 :=} {} if$
% start with an empty string, then while the components are the same
% add "\bysame"
""
#1 'i :=
{i len1 > not}
{ temp i "{ff }{vv }{ll}{ jj}" format.name$
% duplicate$ i int.to.str$ * warning$
s i "{ff }{vv }{ll}{ jj}" format.name$
% duplicate$ i int.to.str$ * warning$
=
{ #1 i < {" and " *} {} if$
"\bysame{}" * i #1 + 'i :=}
{#-1 'len1 :=}
if$
}
while$
% add the rest of the second string
{i len2 > not}
{ #1 i < {" and " *} {} if$
s i "{ff }{vv }{ll}{ jj}" format.name$ *
i #1 + 'i :=
}
while$
% duplicate$ warning$
}
INTEGERS { nameptr namesleft numnames }
FUNCTION {format.names}
{ 'name.list :=
'name.style :=
'later.name.formats :=
's := % binary separator
'first.name.format :=
#1 'nameptr :=
name.list num.names$ 'numnames :=
% If we're to make this entry bold or something, prepend to the string of names
name.style "" = {} {"{" name.style *} if$
numnames 'namesleft :=
{ namesleft #0 > }
{ name.list nameptr nameptr #1 = {first.name.format} {later.name.formats} if$
format.name$ 'temp :=
nameptr #1 >
{ namesleft #1 >
{ ", " * temp * }
{ temp "others" =
{ " et~al." * }
{nameptr #2 = % handle ", and" vs " and "
{s * temp *}
{", and " * temp * }
if$
}
if$
}
if$
}
'temp
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
% If we're to make this entry bold or something, append to the string of names
name.style "" = {} {"}" * *} if$
}
FUNCTION {format.authors}
{ 'temp :=
"{vv~}{ll}{, jj}{, ff}" " and " "{ff~}{vv~}{ll}{, jj}" "" temp
format.names
}
FUNCTION {format.editors}
{ 'temp :=
"{vv~}{ll}{, jj}{, ff}" " and " "{ff~}{vv~}{ll}{, jj}" ""
temp format.names
editor num.names$ #1 >
{ ", eds" * }
{ ", ed." * }
if$
}
FUNCTION {format.editors.notkey}
{ editor empty$
{ "" }
{ "{ff~}{vv~}{ll}{, jj}" " and " "{ff~}{vv~}{ll}{, jj}" ""
editor format.names
editor num.names$ #1 > {", eds."} {", ed."} if$
*
}
if$
}
FUNCTION {format.title}
{ space title quoted comma }
FUNCTION {n.dashify}
{ 'temp :=
""
{ temp empty$ not }
{ temp #1 #1 substring$ "-" =
{ temp #1 #2 substring$ "--" = not
{ "--" *
temp #2 global.max$ substring$ 'temp :=
}
{ { temp #1 #1 substring$ "-" = }
{ "-" *
temp #2 global.max$ substring$ 'temp :=
}
while$
}
if$
}
{ temp #1 #1 substring$ *
temp #2 global.max$ substring$ 'temp :=
}
if$
}
while$
}
FUNCTION {format.btitle}
{ title emphasize
}
FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
{ "~" }
{ " " }
if$
swap$ * *
}
FUNCTION {either.or.check}
{ empty$
'pop$
{ "can't use both " swap$ * " fields in " * cite$ * warning$ }
if$
}
FUNCTION {format.bvolume}
{ volume empty$
{ "" }
{ "Vol." volume tie.or.space.connect
series empty$
{}
{ " of " * series emphasize * }
if$
"volume and number" number either.or.check
}
if$
}
FUNCTION {format.bvolume.output}
{comma format.bvolume plain.space.output}
FUNCTION {mid.sentence.q}
{
separator empty = separator block = separator period = or or not
}
FUNCTION {format.number.series}
{ volume empty$
{ number empty$
{series field.or.null}
{ mid.sentence.q
{ "number" }
{ "Number" }
if$
number tie.or.space.connect
series empty$
{ "there's a number but no series in " cite$ * warning$ }
{ add.period$ " In " * series quote * }
if$
}
if$
}
{ "" }
if$
}
FUNCTION {format.edition.output}
{ edition empty$
{ }
{ comma edition
mid.sentence.q { "l" } { "t" } if$
change.case$ " ed." *
plain.space.output
}
if$
}
FUNCTION {format.publisher.address}
{
address empty$
{comma publisher plain.comma output}
{publisher empty$
{}
{comma address plain colon output
colon publisher plain.comma output}
if$}
if$
}
INTEGERS { multiresult }
FUNCTION {multi.page.check}
{ 'temp :=
#0 'multiresult :=
{ multiresult not
temp empty$ not
and
}
{ temp #1 #1 substring$
duplicate$ "-" =
swap$ duplicate$ "," =
swap$ "+" =
or or
{ #1 'multiresult := }
{ temp #2 global.max$ substring$ 'temp := }
if$
}
while$
multiresult
}
FUNCTION {format.pages}
{ pages empty$
{ "" }
{ pages multi.page.check
{ "pp.~" pages n.dashify * }
{ "p.~" pages * }
if$
}
if$
}
FUNCTION {output.month.year}
{
space month plain.space.output
space year plain.comma "year" output.check
}
FUNCTION {output.vol.num.pages}
{ space volume italic space output
number empty$
{}
{ space "(" number * ")" * plain.comma output.nonnull
volume empty$
{ "there's a number but no volume in " cite$ * warning$ }
{}
if$
}
if$
% "*** a" warning$
comma 'next.separator := % hack
pages empty$
{}
{ number empty$ volume empty$ and
{ comma format.pages plain.space.output }
{ comma pages n.dashify plain.space.output }
if$
}
if$
}
FUNCTION {format.chapter.pages}
{ chapter empty$
'format.pages
{ type empty$
{ "chapter" }
{ type "l" change.case$ }
if$
chapter tie.or.space.connect
pages empty$
{}
{ ", " * format.pages * }
if$
}
if$
}
FUNCTION {output.in.ed.booktitle}
{ booktitle "booktitle" item.check
comma "in" plain.space output.nonnull
editor empty$
{ space booktitle quoted space output.nonnull}
{ space format.editors.notkey plain.space output.nonnull
comma booktitle italic comma output.nonnull
}
if$
}
FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
month empty$ year empty$ note empty$
and and and and and
key empty$ not and
{ "all relevant fields are empty in " cite$ * warning$ }
{}
if$
}
FUNCTION {format.thesis.type}
{ type empty$
{}
{ pop$
type "t" change.case$
}
if$
}
FUNCTION {format.tr.number}
{ type empty$
{ "Technical Report" }
'type
if$
number empty$
{ }
{ number tie.or.space.connect }
if$
}
FUNCTION {format.article.crossref}
{ key empty$
{ journal empty$
{ "need key or journal for " cite$ * " to crossref " * crossref *
warning$
""
}
{ "in {\it " journal * "\/} \cite{" * crossref * "}" *}
if$
}
{ add.period$ "In \citeasnoun{" crossref * "}" * }
if$
}
FUNCTION {format.book.crossref}
{ volume empty$
{ "empty volume in " cite$ * "'s crossref of " * crossref * warning$
"in "
}
{ "Vol." volume tie.or.space.connect
" of " *
}
if$
editor empty$
editor field.or.null author field.or.null =
or
{ key empty$
{ series empty$
{ "need editor, key, or series for " cite$ * " to crossref " *
crossref * warning$
"" *
}
{ "{\it " * series * "\/} \cite{" * crossref * "}" *}
if$
}
{ " \citeasnoun{" * crossref * "}" * }
if$
}
{ " \citeasnoun{" * crossref * "}" * }
if$
}
FUNCTION {output.incoll.inproc.crossref}
{ editor empty$
editor field.or.null author field.or.null =
or
{ key empty$
{ booktitle empty$
{ "need editor, key, or booktitle for " cite$ * " to crossref " *
crossref * warning$
}
{ period "In {\it " booktitle * "\/}" * " \cite{" * crossref * "}" * plain.space output.nonnull}
if$
}
{ period "In \citeasnoun{" crossref * "}" * plain.space output.nonnull}
if$
}
{ period "In \citeasnoun{" crossref * "}" * plain.space output.nonnull}
if$
}
INTEGERS { len }
FUNCTION {chop.word}
{ 's :=
'len :=
s #1 len substring$ =
{ s len #1 + global.max$ substring$ }
's
if$
}
INTEGERS { author.field editor.field organization.field title.field key.field }
FUNCTION {init.field.constants}
{ #0 'author.field :=
#1 'editor.field :=
#2 'organization.field :=
#3 'title.field :=
#4 'key.field :=
}
FUNCTION {format.lab.names.abbr}
{ 'name.list :=
name.list num.names$ 'numnames :=
numnames #1 >
{ numnames #2 >
{ name.list #1 "{vv~}{ll}" format.name$ " et al." * }
{ name.list #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
{ name.list #1 "{vv~}{ll}" format.name$ " et al." * }
{ name.list #1 "{vv~}{ll}" format.name$ " and " *
name.list #2 "{vv~}{ll}" format.name$ *
}
if$
}
if$
field.used editor.field = {", eds" *} {} if$
}
{
name.list #1 "{vv~}{ll}" format.name$
field.used editor.field = {", ed" *} {} if$
}
if$
}
FUNCTION {format.lab.names.full}
{ 'name.list :=
#1 'nameptr :=
name.list num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ name.list nameptr "{vv~}{ll}" format.name$ 'temp :=
nameptr #1 >
{ namesleft #1 >
{ ", " * temp * }
{ temp "others" =
{ " et~al." * }
{ " and " * temp * }
if$
}
if$
}
'temp
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
numnames #1 > field.used editor.field = and {", eds" *} {} if$
numnames #1 = field.used editor.field = and {", ed" *} {} if$
}
STRINGS { prev.author }
FUNCTION {make.list.label}
{author.field field.used =
{ prev.author author compare.names format.authors
author 'prev.author :=}
{ editor.field field.used =
{ prev.author editor compare.names format.editors
editor 'prev.author := }
{ organization.field field.used =
{ "The " #4 organization chop.word
duplicate$ prev.author = {pop$ "\bysame{}"}
{duplicate$ 'prev.author :=} if$}
{ "foo" 'prev.author :=
title.field field.used =
{ format.btitle }
{ key.field field.used =
{ key #3 text.prefix$ }
{ "Internal error :001 on " cite$ * " label" * warning$ }
if$
}
if$
}
if$
}
if$
}
if$
}
FUNCTION {make.full.label}
{ author.field field.used =
{ author format.lab.names.full }
{ editor.field field.used =
{ editor format.lab.names.full }
{ organization.field field.used =
{ "The " #4 organization chop.word #3 text.prefix$ }
{ title.field field.used =
{ format.btitle }
{ key.field field.used =
{ key #3 text.prefix$ }
{ "Internal error :001 on " cite$ * " label" * warning$ }
if$
}
if$
}
if$
}
if$
}
if$
}
FUNCTION {make.abbr.label}
{ author.field field.used =
{ author format.lab.names.abbr }
{ editor.field field.used =
{ editor format.lab.names.abbr }
{ organization.field field.used =
{ "The " #4 organization chop.word #3 text.prefix$ }
{ title.field field.used =
{ format.btitle }
{ key.field field.used =
{ key #3 text.prefix$ }
{ "Internal error :001 on " cite$ * " label" * warning$ }
if$
}
if$
}
if$
}
if$
}
if$
}
FUNCTION {output.bibitem}
{ newline$
"\harvarditem[" write$
make.abbr.label write$
"]{" write$
make.full.label write$
"}{" write$
list.year write$
"}{" write$
cite$ write$
"}" write$
newline$
""
empty 'separator :=
plain 'attribute :=
% }
%
% FUNCTION {list.label.output}
% {
space make.list.label bold comma output.nonnull
}
FUNCTION {author.item.check} {author "author" item.check}
FUNCTION {format.title.if.not.sortkey.check}
{title.field field.used =
{}
{ format.title "title" output.check }
if$}
FUNCTION {article}
{ output.bibitem
author.item.check
format.title.if.not.sortkey.check
crossref missing$
{ space journal italic comma "journal" output.check
output.month.year
output.vol.num.pages
}
{ space format.article.crossref plain.space output.nonnull
comma format.pages plain.space.output
}
if$
fin.entry
}
FUNCTION {book}
{ output.bibitem
author empty$
{ editor "author and editor" item.check }
{ crossref missing$
{ "author and editor" editor either.or.check }
{}
if$
}
if$
title.field field.used =
{}
{ space title italic space "title" output.check }
if$
crossref missing$
{
space format.number.series plain.space.output
format.edition.output
format.bvolume.output
format.publisher.address
output.month.year
}
{ space format.book.crossref plain.space output.nonnull
format.edition.output
}
if$
fin.entry
}
FUNCTION {booklet}
{ output.bibitem
format.title.if.not.sortkey.check
space howpublished plain.space.output
space address plain.space.output
output.month.year
fin.entry
}
FUNCTION {inbook}
{ output.bibitem
author empty$
{ editor "author and editor" item.check }
{ crossref missing$
{ "author and editor" editor either.or.check }
{}
if$
}
if$
title.field field.used =
{}
{ space title italic space "title" output.check }
if$
crossref missing$
{ space format.number.series plain.space.output
format.edition.output
comma format.bvolume plain.comma output
format.publisher.address
output.month.year
}
{ space format.book.crossref plain.space output.nonnull
format.edition.output
}
if$
format.chapter.pages "chapter and pages" output.check
fin.entry
}
FUNCTION {incollection}
{ output.bibitem
format.title.if.not.sortkey.check
author.item.check
crossref missing$
{ output.in.ed.booktitle
format.edition.output
format.bvolume.output
space format.number.series plain.space.output
format.publisher.address
output.month.year
}
{ output.incoll.inproc.crossref }
if$
space format.chapter.pages plain.space.output
fin.entry
}
FUNCTION {inproceedings}
{ output.bibitem
format.title.if.not.sortkey.check
author.item.check
crossref missing$
{ output.in.ed.booktitle
format.bvolume.output
space format.number.series plain.space.output
address empty$
{ space organization plain.space.output
space publisher plain.space.output
}
{ space organization plain.space.output
space publisher plain.space.output
space address plain.space output.nonnull
}
if$
output.month.year
}
{ output.incoll.inproc.crossref}
if$
space format.pages plain.space.output
fin.entry
}
FUNCTION {conference} { inproceedings }
FUNCTION {manual}
{ output.bibitem
title.field field.used =
{}
{author empty$ {comma}{space} if$ title italic space "title" output.check }
if$
organization.field field.used = organization empty$ or
{} {space organization plain.space output.nonnull} if$
format.edition.output
format.publisher.address
output.month.year
fin.entry
}
FUNCTION {mastersthesis}
{ output.bibitem
author.item.check
format.title.if.not.sortkey.check
space "Master's thesis" format.thesis.type plain.space output.nonnull
comma school plain.space "school" output.check
comma address plain.space.output
output.month.year
fin.entry
}
FUNCTION {misc}
{ output.bibitem
format.title.if.not.sortkey.check
space howpublished plain.space.output
output.month.year
fin.entry
empty.misc.check
}
FUNCTION {phdthesis}
{ output.bibitem
author.item.check
title.field field.used =
{}
{ space title quoted period "title" output.check }
if$
space "PhD dissertation" format.thesis.type plain.space output.nonnull
comma school plain.space "school" output.check
comma address plain.space.output
output.month.year
fin.entry
}
FUNCTION {proceedings}
{ output.bibitem
title.field field.used =
{}
{ space title italic space "title" output.check }
if$
format.bvolume.output
space format.number.series plain.space.output
address empty$
{ editor empty$
{}
{ space organization plain.space.output
}
if$
space publisher plain.space.output
}
{ editor empty$
{}
{ space organization plain.space.output }
if$
space publisher plain.space.output
space address plain.space output.nonnull
}
if$
output.month.year
fin.entry
}
FUNCTION {techreport}
{ output.bibitem
author.item.check
format.title.if.not.sortkey.check
space format.tr.number plain.space output.nonnull
institution empty$
{}
{ comma institution plain.space "institution" output.check }
if$
comma address plain.space.output
output.month.year
fin.entry
}
FUNCTION {unpublished}
{ output.bibitem
author.item.check
format.title.if.not.sortkey.check
output.month.year
note "note" item.check
fin.entry
}
FUNCTION {default.type} { misc }
MACRO {jan} {"January"}
MACRO {feb} {"February"}
MACRO {mar} {"March"}
MACRO {apr} {"April"}
MACRO {may} {"May"}
MACRO {jun} {"June"}
MACRO {jul} {"July"}
MACRO {aug} {"August"}
MACRO {sep} {"September"}
MACRO {oct} {"October"}
MACRO {nov} {"November"}
MACRO {dec} {"December"}
READ
EXECUTE {init.field.constants}
FUNCTION {sortify}
{ purify$
"l" change.case$
}
FUNCTION {author.editor.key.label}
{ author empty$
{ editor empty$
{ title empty$
{ key.field 'field.used := }
{ title.field 'field.used := }
if$
}
{ editor.field 'field.used := }
if$
}
{ author.field 'field.used := }
if$
}
FUNCTION {key.organization.label}
{organization empty$
{ title empty$
{ key.field 'field.used := }
{ title.field 'field.used := }
if$
}
{ organization.field 'field.used := }
if$}
FUNCTION {author.key.organization.label}
{ author empty$
{ key.organization.label}
{ author.field 'field.used := }
if$
}
FUNCTION {editor.key.organization.label}
{ editor empty$
{ key.organization.label}
{ editor.field 'field.used := }
if$
}
FUNCTION {sort.format.title}
{ 'temp :=
"A " #2
"An " #3
"The " #4 temp chop.word
chop.word
chop.word
sortify
#1 global.max$ substring$
}
FUNCTION {calc.label}
{ type$ "book" =
type$ "inbook" =
or
'author.editor.key.label
{ type$ "proceedings" =
'editor.key.organization.label
{ type$ "manual" =
'author.key.organization.label
'author.editor.key.label % don't really use .editor.
if$
}
if$
}
if$
make.abbr.label
title.field field.used =
{ sort.format.title }
{ sortify }
if$
year field.or.null purify$ #-1 #4 substring$ sortify
*
'sort.label :=
}
FUNCTION {first.presort}
{ "abcxyz" 'prev.author :=
calc.label
sort.label
title.field field.used =
{}
{ " "
*
make.list.label sortify
*
" "
*
title field.or.null
sort.format.title
*
}
if$
#1 entry.max$ substring$
'sort.key$ :=
}
ITERATE {first.presort}
SORT
STRINGS { last.sort.label next.extra }
INTEGERS { last.extra.num }
FUNCTION {initialize.last.extra.num}
{ #0 int.to.chr$ 'last.sort.label :=
"" 'next.extra :=
#0 'last.extra.num :=
}
FUNCTION {forward.pass}
{ last.sort.label sort.label =
{ last.extra.num #1 + 'last.extra.num :=
last.extra.num int.to.chr$ 'extra.label :=
}
{ "a" chr.to.int$ 'last.extra.num :=
"" 'extra.label :=
sort.label 'last.sort.label :=
}
if$
}
FUNCTION {reverse.pass}
{ next.extra "b" =
{ "a" 'extra.label := }
{}
if$
year empty$
{ "n.d." extra.label * 'list.year := }
{ year extra.label * 'list.year := }
if$
extra.label 'next.extra :=
}
EXECUTE {initialize.last.extra.num}
ITERATE {forward.pass}
REVERSE {reverse.pass}
FUNCTION {second.presort}
{ "abcxyz" 'prev.author :=
make.list.label
title.field field.used =
{ sort.format.title }
{ sortify }
if$
" "
*
list.year field.or.null sortify
*
" "
*
title.field field.used =
{}
{ title field.or.null
sort.format.title
*
}
if$
#1 entry.max$ substring$
'sort.key$ :=
}
ITERATE {second.presort}
SORT
INTEGERS { number.label }
FUNCTION {initialize.longest.label}
{
#1 'number.label :=
"abcxyz" 'prev.author :=
}
FUNCTION {longest.label.pass}
{
"" 'extra.label :=
author empty$ { editor empty$ {"foo"} {editor} if$}
{author}
if$
'f :=
% remember this entry to compare to the next one
author empty$ { editor empty$ {"abcxyz"} {editor} if$} {author} if$
'prev.author :=
}
EXECUTE {initialize.longest.label}
ITERATE {longest.label.pass}
FUNCTION {begin.bib}
{ preamble$ empty$
{}
{ preamble$ write$ newline$ }
if$
"\ifx\undefined\bysame" write$ newline$
"\newcommand{\bysame}{\leavevmode\hbox to\leftmargin{\hrulefill\,\,}}"
write$ newline$
"\fi" write$ newline$
"\begin{thebibliography}{xx}" write$ newline$
}
EXECUTE {begin.bib}
EXECUTE {init.state.consts}
FUNCTION {init.call}
{ "abcxyz" 'prev.author := }
EXECUTE {init.call}
ITERATE {call.type$}
FUNCTION {end.bib}
{newline$ "\end{thebibliography}" write$ newline$ }
EXECUTE {end.bib}